Un componente de mi proyecto llama a una función de otro archivo y le pasa un objeto con tres propiedades: stringProp , numProp y dateProp (que es un objeto de Date que el componente actual recibe como accesorio de un componente de entrada)
const result = MyAPI.calc({stringProp: {stringProp}, numProp: {numProp}, dateProp: {dateProp}}) console.log(`{stringProp: ${stringProp}, numProp: ${numProp}, dateProp: ${dateProp} ${Object.prototype.toString.call(dateProp)}}`) // >>> {stringProp: something, numProp: 123, dateProp: Fri Jan 19 2024 [object Date]} Cuando se llama a la función calc :
export const calc = (props) => { const stringProp = props.stringProp || '' const numProp = props.numProp || 0 console.log(`props.dateProp: ${props.dateProp} ${Object.prototype.toString.call(dateProp)}`) // >>> props.dateProp: [object Object] [object Object] ... } numProp y stringProp están llegando como se esperaba, pero dateProp no. Estos tres accesorios ya se pasaron como parámetros de un componente a otro y se cumplieron como se esperaba.
En el componente de entrada original, dateProp se guarda en el estado con el useState .
He visto algunas preguntas similares, pero no muchas han sido respondidas, o la solución fue corregir un error tipográfico que no creo que sea el caso ahora.
Actualización: según la respuesta de @KyleRifqi a continuación, llamar a JSON.stringify(props.dateProp, null, '\t') devolverá un valor como "2024-01-19T00:00:00.000Z" que muestra el typeof string . ¿Cómo convertiría esto en una cita? new Date() no funciona y devuelve una Invalid Date . Hay muchas respuestas antiguas que usan la función match y/o reviver para convertirlo, pero ¿hay un enfoque más moderno y robusto?
Cuando un objeto se convierte en una cadena, se convierte como "[objeto Objeto]". Si desea consolar el registro de un objeto, use la función JSON.stringify() .
Ejemplo:
console.log(`props.dateProp: ${JSON.stringify(props.dateProp, null, '\t')}`)